macro 'Open Serial Port [O]';
begin
  RequiresVersion(1.48);
  OpenSerial('9600 baud,no parity,eight data,one stop');
end;


macro 'Put Serial [P]';
begin
   PutSerial(GetString('Enter a string:'));
end;


macro 'Serial Output Test [T]';
var
  i:integer;
begin
  SetCursor('Watch');
  for i:=1 to 10 do
    PutSerial('The is line ',i:3,chr(13),chr(10));
  end;
end;


macro 'Get Serial and Echo [G]';
var
  i:integer;
  ch:string; {actually one char}
begin
  ShowMessage('Press mouse button to abort.');
  SetCursor('Watch');
  repeat until GetSerial=''; {Flush input buffer}
  repeat
    ch:=GetSerial; {returns null string if input buffer empty}
    if ch<>'' then ShowMessage('char="',ch,'" (',ord(ch):1,')');
    PutSerial(ch);
    if ch=chr(13) then PutSerial(chr(10)); {if return send line feed}
  until button;
end;

macro 'Capture Serial Input [C]';
{Captures serial input to a text window.}
var
  x,y,width,height,cc,tc:integer;
  ch:string; {actually one char}
begin
  RequiresVersion(1.52);
  OpenSerial('9600');
  NewTextWindow('Serial Input');
  cc:=0; tc:=0;
  ShowMessage('Use command-period to abort');
  SetCursor('Watch');
  repeat
     repeat tc:=tc+1; ch:=GetSerial until (ch<>'') or button;
     write(ch);
     cc:=cc+1;
  until button;
 end;

macro 'Display Serial Input';
{Displays serial input in a window.}
var
  x,y,width,height,count,line:integer;
  ch:string; {actually one char}
  BaudRate:string;
begin
  RequiresVersion(1.48);
  repeat
    BaudRate:=Getstring('Baud Rate(1200, 2400, 9600 or 19200)','9600');
  until (BaudRate='1200') or (BaudRate='2400') or(BaudRate='9600') or (BaudRate='19200');
  OpenSerial(BaudRate);
  width:=500;
  height:=500;
  SetNewSize(width,height);
  SetForeground(255);
  SetBackground(0);
  MakeNewWindow('Serial Input');
  SetCursor('Watch');
  SetFont('Monaco');
  SetText('With background; Left Justified');
  SetFontSize(9);
  MoveTo(8,8);
  count:=0;
  line:=0;
  ShowMessage('Press mouse button to abort');
  repeat
     ch:=GetSerial;
     if ch<>'' then begin
       count:=count+1;
       if (ord(ch)=13) or (count=80) then begin {13=Carriage Return}
         writeln(ch);
         count:=0
         line:=line+1;
         if line=54 then begin
           Clear;
           moveto(8,8);
           line:=0;
         end;
       end else
         write(ch);
     end;
   until button;
end;


procedure GetResponse;
{Gets responses to commands sent to the Newport 2-axis controller}
var
  ch:string;
  TimeOutTicks:integer;
  TimeOUt:boolean;
begin
  response:='';
  TimeOutTicks:=TickCount+60; {1 sec.}
  repeat
    ch:=GetSerial;
    if ord(ch)>=32 {ignore control characters}
      then response:=concat(response,ch);
    timeout:=TickCount>TimeOutTicks;
  until (ch=return) or TimeOut;
  if TimeOut then response:=concat(response,'[1 second time out]');
end;


macro 'Test Newport Motion Controller[N]';
{
Simple macro to test the Newport PMC200-P programmable 2-axis
motion controller. Before starting, connect the PMC200-P to 
the Mac's modem port. This can be done using a modem cable
and a 9-pin to 25-pin adapter consisting of a female 25-pin
connector wired back-to-back with a female 9-pin connector
acording to the table below.

   9-pin      25-pin
     2 <------> 3  (receive data)
     3 <------> 2  (transmit data)
     5 <------> 7  (signal ground)

Note: RS-232 INPUT ECHO MODE must be disabled. The phone
number for Newport is 714-253-1665.
}
var
  cmd,response,linefeed,return:string;
begin
  RequiresVersion(1.48);
  linefeed:=chr(10);
  return:=chr(13);
  OpenSerial('9600 baud,no parity,eight data,one stop');
  repeat
    cmd:=GetString('Enter PMC200-P Command:','*IDN?');
    repeat until GetSerial=''; {flush input buffer}
    PutSerial(cmd,return,linefeed);
    GetResponse;
    PutMessage(response)
  until button;
end;
